package com.lemon.gen.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.lemon.core.enums.ServiceEnum;
import com.lemon.core.web.Result;
import com.lemon.gen.dto.TableDTO;
import com.lemon.gen.enums.DbTypeEnum;
import com.lemon.gen.enums.WebEnum;
import com.lemon.gen.po.TablePO;
import com.lemon.gen.service.ITableService;
import com.lemon.gen.vo.DbVO;
import lombok.extern.log4j.Log4j2;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.Arrays;
import java.util.Map;

import static java.util.stream.Collectors.toMap;

/**
 * 控制层
 *
 * @author 李猛
 * @since 2024-02-01
 */
@Log4j2
@RestController
@RequestMapping("table")
public class TableController {
    @Resource
    private ITableService tableService;

    /**
     * 获取所有的微服务
     *
     * @return
     */
    @GetMapping("getAllService")
    public Result<Map<String, String>> getAllService() {
        return Result.ok(Arrays.stream(ServiceEnum.values()).collect(toMap(ServiceEnum::getName, ServiceEnum::getInfo)));
    }

    /**
     * 获取数据源类型
     *
     * @return
     */
    @GetMapping("getAllDbType")
    public Result<Map<Integer, String>> getAllDbType() {
        return Result.ok(Arrays.stream(DbTypeEnum.values()).collect(toMap(DbTypeEnum::getType, DbTypeEnum::getInfo)));
    }

    /**
     * 获取生成页面的类型
     *
     * @return
     */
    @GetMapping("getAllWebType")
    public Result<Map<Integer, String>> getAllWebType() {
        return Result.ok(Arrays.stream(WebEnum.values()).collect(toMap(WebEnum::getType, WebEnum::getInfo)));
    }

    /**
     * 获取所有数据库表
     *
     * @return
     */
    @GetMapping("getAllTable")
    public Result<Map<String, Boolean>> getAllTable(TableDTO tableDTO) {
        return tableService.getAllTable(tableDTO);
    }


    /**
     * 获取默认数据库配置
     *
     * @return
     */
    @GetMapping("getDbConfig")
    public Result<DbVO> getDbConfig() {
        return tableService.getDbConfig();
    }

    /**
     * 生成代码的接口
     *
     * @param tableDTO
     * @return
     */
    @PostMapping("generateCode")
    public Result<String> generateCode(@RequestBody TableDTO tableDTO) {
        return tableService.generateCode(tableDTO);
    }

    /**
     * 分页查询数据
     *
     * @return
     */
    @GetMapping("getPage")
    public Result<Page<TablePO>> getPage(TableDTO tableDTO) {
        return tableService.getPage(tableDTO);
    }

    /**
     * 根据ID删除
     *
     * @return
     */
    @DeleteMapping("delById/{id}")
    public Result<Void> delById(@PathVariable("id") Number id) {
        return tableService.delById(id);
    }
}